const axios = require('axios');
const { getDb } = require('../config/db');

// 生成四位数随机码
const generateCode = () => {
  return Math.floor(1000 + Math.random() * 9000).toString();
};

// 设置验证码的有效时间（秒）
const CODE_EXPIRY_TIME = 300;

// 发送验证码
exports.sendVerificationCode = async (req, res) => {
  try {
    const { phoneNumber } = req.body;
    const collection = getDb().collection('verificationCodes');
    const now = new Date();
    // 查找手机号对应的验证码数据
    const existingRecord = await collection.findOne({ phoneNumber });
    if (existingRecord) {
      const timeElapsed = (now - existingRecord.createdAt) / 1000; // 转换为秒
      if (timeElapsed < CODE_EXPIRY_TIME) {
        // 验证码未过期，不操作
        return res.status(200).json({ message: '验证码未过期，请稍后再试' });
      } else {
        // 验证码已过期，生成新的验证码并更新数据
        const newCode = generateCode(); // 生成验证码的函数
        await collection.updateOne(
          { phoneNumber },
          { $set: { code: newCode, createdAt: now } }
        );
        return res.status(200).json({ message: '新的验证码已生成并发送' });
      }
    } else {
      // 手机号不存在，生成新的验证码并插入数据
      const newCode = generateCode(); // 生成验证码的函数
      await collection.insertOne({
        phoneNumber,
        code: newCode,
        createdAt: now
      });
      return res.status(200).json({ message: '验证码已生成并发送' });
    }
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
  // const code = generateCode();
  // const now = new Date();
  // const params = {
  //   phone: phoneNumber,
  //   signName: '拼窝',
  //   tplCode: 'SMS_2309136403',
  //   ip: '192.168.1.1',
  //   tplParams: { code: code }
  // };
  //   const response = await axios.post('http://192.168.0.133:5067/api/xny/sms/send', params);
  //   const result = response.data;
  //   if (result.code === 200) {
  //     res.status(200).json({ message: '验证码发送成功' });
  //   } else {
  //     res.status(500).json({ error: '验证码发送失败', details: result });
  //   }
};

// 验证验证码
exports.verifyCode = async (req, res) => {
  const { phoneNumber, code } = req.body;

  try {
    const collection = getDb().collection('verificationCodes');
    const record = await collection.findOne({ phoneNumber, code });
    if (!record) {
      return res.status(400).json({ error: '验证码错误' });
    }

    const now = new Date();
    if ((now - record.createdAt) / 1000 > CODE_EXPIRY_TIME) { // 验证码过期时间为5分钟
      return res.status(400).json({ error: '验证码已过期' });
    }

    res.status(200).json({ message: '验证成功' });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};
